package com.xy_pro.xymanager.validator;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;

import java.util.*;

public class ExcelValidator {
    private static final Set<String> REQUIRED_HEADERS = new HashSet<>(Collections.singletonList("学生姓名"));

    // 验证表头
    public static List<String> validateHeaders(Row headerRow) {
        List<String> headers = new ArrayList<>();
        List<String> errors = new ArrayList<>();

        for (Cell cell : headerRow) {
            headers.add(cell.getStringCellValue());
        }

        // 检查必填表头
        for (String requiredHeader : REQUIRED_HEADERS) {
            if (!headers.contains(requiredHeader)) {
                errors.add("缺少必填列: " + requiredHeader);
            }
        }

        return errors;
    }

    // 验证单元格数据类型
    public static String validateCell(Cell cell, String header) {
        if (cell == null) {
            return null; // 允许空值，由业务逻辑决定是否允许
        }

        // 根据列名进行特定验证
        switch (header) {
            case "学生姓名":
                if (cell.getCellType() != CellType.STRING) {
                    return "学生姓名列必须是文本类型";
                }
                break;
            case "年龄":
                if (cell.getCellType() != CellType.NUMERIC) {
                    return "年龄列必须是数字类型";
                }
                break;
            case "成绩":
                if (cell.getCellType() != CellType.NUMERIC) {
                    return "成绩列必须是数字类型";
                } else {
                    double score = cell.getNumericCellValue();
                    if (score < 0 || score > 300) {
                        return "成绩必须在0-300之间";
                    }
                }
                break;
            // 可以添加更多列的验证规则
        }

        return null; // 验证通过
    }
}
